<!DOCTYPE html>
<html>

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Git命令</title>
    <style>
        * {
            margin: 4px;
            padding: 0px;
        }

        p {
            font-size: 18px;
            margin-top: 20px;
        }

        .code {
            color: #ff0000;
            font-weight: bold;
            font-size: 20px;
        }

        table {
            width: 100%;
            text-align: left;
            border: 1px solid #000;
            background-color: rgb(200, 250, 236);
        }
    </style>
</head>

<body>
    <div class="post-body" itemprop="articleBody" style="margin-left: 25%;">

        <p>
            <a href="http://sanstylemc.cn/2018/04/05/Git%E5%91%BD%E4%BB%A4/" target="_blank">---来源---</a>
            <br />需要学习的东西太多了，很多命令用到时却忘了，分享一个经典的Git 常用命清单，建议收藏，或者收进你的云笔记中，方便用到时查阅。
        </p>

        <table>
            <thead>
                <tr>
                    <th>名词</th>
                    <th style="text-align:center">翻译</th>
                </tr>
            </thead>
            <tbody>
                <tr>
                    <td>workspace</td>
                    <td style="text-align:center">工作区</td>
                </tr>
                <tr>
                    <td>Index/Stage</td>
                    <td style="text-align:center">暂存区</td>
                </tr>
                <tr>
                    <td>Repository</td>
                    <td style="text-align:center">仓库区(本地仓库)</td>
                </tr>
                <tr>
                    <td>Remote</td>
                    <td style="text-align:center">远程仓库</td>
                </tr>
            </tbody>
        </table>
        <h2 id="新建代码库">
            <a href="#新建代码库" class="headerlink" title="新建代码库"></a>新建代码库</h2>
        <p>在当前目录新建一个Git代码库
            <br>
            <figure class="highlight shell">
                <table>
                    <tr>
                        <td class="code">
                            <pre><div class="line"><span class="meta">$</span><span class="bash"> git init</span></div></pre>
                        </td>
                    </tr>
                </table>
            </figure>
        </p>
        <p>新建一个目录，将其初始化为Git代码库
            <br>
            <figure class="highlight shell">
                <table>
                    <tr>
                        <td class="code">
                            <pre><div class="line"><span class="meta">$</span><span class="bash"> git init [project-name]</span></div></pre>
                        </td>
                    </tr>
                </table>
            </figure>
        </p>
        <p>下载一个项目和它的整个代码历史
            <br>
            <figure class="highlight crmsh">
                <table>
                    <tr>
                        <td class="code">
                            <pre><div class="line">$ git <span class="keyword">clone</span> <span class="title">[url</span>]</div></pre>
                        </td>
                    </tr>
                </table>
            </figure>
        </p>
        <h2 id="添加或删除文件">
            <a href="#添加或删除文件" class="headerlink" title="添加或删除文件"></a>添加或删除文件</h2>
        <p>添加指定文件到暂存区
            <br>
            <figure class="highlight routeros">
                <table>
                    <tr>
                        <td class="code">
                            <pre><div class="line">$ git <span class="builtin-name">add</span> [file1] [file2]<span class="built_in">..</span><span class="built_in">..</span><span class="built_in">..</span></div></pre>
                        </td>
                    </tr>
                </table>
            </figure>
        </p>
        <p>添加指定目录到暂存区，包括子目录
            <br>
            <figure class="highlight dockerfile">
                <table>
                    <tr>
                        <td class="code">
                            <pre><div class="line">$ git <span class="keyword">add</span><span class="bash"> [dir]</span></div></pre>
                        </td>
                    </tr>
                </table>
            </figure>
        </p>
        <p>添加当前目录的所有文件到暂存区
            <br>
            <figure class="highlight dockerfile">
                <table>
                    <tr>
                        <td class="code">
                            <pre><div class="line">$ git <span class="keyword">add</span><span class="bash"> .</span></div></pre>
                        </td>
                    </tr>
                </table>
            </figure>
        </p>
        <p>添加每个变化前，都会要求确认。对于同一个文件的多处变化，可以实现分次提交
            <br>
            <figure class="highlight dockerfile">
                <table>
                    <tr>
                        <td class="code">
                            <pre><div class="line">$ git <span class="keyword">add</span><span class="bash"> -p</span></div></pre>
                        </td>
                    </tr>
                </table>
            </figure>
        </p>
        <p>删除工作区文件，并且将这次删除放入暂存区
            <br>
            <figure class="highlight clean">
                <table>
                    <tr>
                        <td class="code">
                            <pre><div class="line">$ git rm [file1] [file2]......</div></pre>
                        </td>
                    </tr>
                </table>
            </figure>
        </p>
        <p>停止追踪指定文件，但该文件会保留在工作区
            <br>
            <figure class="highlight gams">
                <table>
                    <tr>
                        <td class="code">
                            <pre><div class="line"><span class="symbol">$</span> git rm --cached [<span class="keyword">file</span>]</div></pre>
                        </td>
                    </tr>
                </table>
            </figure>
        </p>
        <p>改名文件，并且将这个改名放入暂存区
            <br>
            <figure class="highlight gams">
                <table>
                    <tr>
                        <td class="code">
                            <pre><div class="line"><span class="symbol">$</span> git mv [<span class="keyword">file</span>-original] [<span class="keyword">file</span>-original]</div></pre>
                        </td>
                    </tr>
                </table>
            </figure>
        </p>
        <h2 id="代码提交到仓库">
            <a href="#代码提交到仓库" class="headerlink" title="代码提交到仓库"></a>代码提交到仓库</h2>
        <p>提交暂存区到仓库区
            <br>
            <figure class="highlight shell">
                <table>
                    <tr>
                        <td class="code">
                            <pre><div class="line"><span class="meta">$</span><span class="bash"> git commit -m [message]</span></div></pre>
                        </td>
                    </tr>
                </table>
            </figure>
        </p>
        <p>提交暂存区的指定文件到仓库区
            <br>
            <figure class="highlight accesslog">
                <table>
                    <tr>
                        <td class="code">
                            <pre><div class="line">$ git commit <span class="string">[file1]</span> <span class="string">[file2]</span>... -m <span class="string">[message]</span></div></pre>
                        </td>
                    </tr>
                </table>
            </figure>
        </p>
        <p>提交工作区自上次commit之后的变化，直接到仓库区
            <br>
            <figure class="highlight shell">
                <table>
                    <tr>
                        <td class="code">
                            <pre><div class="line"><span class="meta">$</span><span class="bash"> git commit -a</span></div></pre>
                        </td>
                    </tr>
                </table>
            </figure>
        </p>
        <p>提交时显示所有diff信息
            <br>
            <figure class="highlight ebnf">
                <table>
                    <tr>
                        <td class="code">
                            <pre><div class="line"><span class="attribute">git commit -v</span></div></pre>
                        </td>
                    </tr>
                </table>
            </figure>
        </p>
        <p>使用一次新的commit，替代上一次提交。如果代码没有任何变化，则用来改写上一次commit的提交信息。
            <br>
            <figure class="highlight shell">
                <table>
                    <tr>
                        <td class="code">
                            <pre><div class="line"><span class="meta">$</span><span class="bash"> git commit --amend -m [message]</span></div></pre>
                        </td>
                    </tr>
                </table>
            </figure>
        </p>
        <p>重做上一次commit，并包括指定文件的新变化
            <br>
            <figure class="highlight prolog">
                <table>
                    <tr>
                        <td class="code">
                            <pre><div class="line">$ git commit --amend [file1] [file2]...</div></pre>
                        </td>
                    </tr>
                </table>
            </figure>
        </p>
        <h2 id="分支管理">
            <a href="#分支管理" class="headerlink" title="分支管理"></a>分支管理</h2>
        <p>列出所有本地分支
            <br>
            <figure class="highlight shell">
                <table>
                    <tr>
                        <td class="code">
                            <pre><div class="line"><span class="meta">$</span><span class="bash"> git branch</span></div></pre>
                        </td>
                    </tr>
                </table>
            </figure>
        </p>
        <p>列出所有远程分支
            <br>
            <figure class="highlight shell">
                <table>
                    <tr>
                        <td class="code">
                            <pre><div class="line"><span class="meta">$</span><span class="bash"> git branch -r</span></div></pre>
                        </td>
                    </tr>
                </table>
            </figure>
        </p>
        <p>列出所有本地分支和远程分支
            <br>
            <figure class="highlight shell">
                <table>
                    <tr>
                        <td class="code">
                            <pre><div class="line"><span class="meta">$</span><span class="bash"> git branch -a</span></div></pre>
                        </td>
                    </tr>
                </table>
            </figure>
        </p>
        <p>新建一个分支，但依然停留在当前分支
            <br>
            <figure class="highlight shell">
                <table>
                    <tr>
                        <td class="code">
                            <pre><div class="line"><span class="meta">$</span><span class="bash"> git branch [branch-name]</span></div></pre>
                        </td>
                    </tr>
                </table>
            </figure>
        </p>
        <p>新建一个分支，并切换到该分支
            <br>
            <figure class="highlight shell">
                <table>
                    <tr>
                        <td class="code">
                            <pre><div class="line"><span class="meta">$</span><span class="bash"> git checkout -b [branch]</span></div></pre>
                        </td>
                    </tr>
                </table>
            </figure>
        </p>
        <p>新建一个分支，指向指定commit
            <br>
            <figure class="highlight accesslog">
                <table>
                    <tr>
                        <td class="code">
                            <pre><div class="line">$ git branch <span class="string">[branch]</span> <span class="string">[commit]</span></div></pre>
                        </td>
                    </tr>
                </table>
            </figure>
        </p>
        <p>新建一个分支，与指定的远程分支建立追踪关系
            <br>
            <figure class="highlight accesslog">
                <table>
                    <tr>
                        <td class="code">
                            <pre><div class="line">$ git branch --track <span class="string">[branch]</span> <span class="string">[remote-branch]</span></div></pre>
                        </td>
                    </tr>
                </table>
            </figure>
        </p>
        <p>切换到指定分支，并更新工作区
            <br>
            <figure class="highlight shell">
                <table>
                    <tr>
                        <td class="code">
                            <pre><div class="line"><span class="meta">$</span><span class="bash"> git checkout [branch-name]</span></div></pre>
                        </td>
                    </tr>
                </table>
            </figure>
        </p>
        <p>切换到上一个分支
            <br>
            <figure class="highlight shell">
                <table>
                    <tr>
                        <td class="code">
                            <pre><div class="line"><span class="meta">$</span><span class="bash"> git checkout -</span></div></pre>
                        </td>
                    </tr>
                </table>
            </figure>
        </p>
        <p>建立追踪关系，在现有分支与指定的远程分支之间
            <br>
            <figure class="highlight gams">
                <table>
                    <tr>
                        <td class="code">
                            <pre><div class="line"><span class="symbol">$</span> git branch --<span class="keyword">set</span>-upstream <span class="comment">[branch] [remote-branch]</span></div></pre>
                        </td>
                    </tr>
                </table>
            </figure>
        </p>
        <p>合并指定分支到当前分支
            <br>
            <figure class="highlight shell">
                <table>
                    <tr>
                        <td class="code">
                            <pre><div class="line"><span class="meta">$</span><span class="bash"> git merge [branch]</span></div></pre>
                        </td>
                    </tr>
                </table>
            </figure>
        </p>
        <p>选择一个commit，合并进当前分支
            <br>
            <figure class="highlight shell">
                <table>
                    <tr>
                        <td class="code">
                            <pre><div class="line"><span class="meta">$</span><span class="bash"> git cherry-pick [commit]</span></div></pre>
                        </td>
                    </tr>
                </table>
            </figure>
        </p>
        <p>删除分支
            <br>
            <figure class="highlight shell">
                <table>
                    <tr>
                        <td class="code">
                            <pre><div class="line"><span class="meta">$</span><span class="bash"> git branch -d [branch-name]</span></div></pre>
                        </td>
                    </tr>
                </table>
            </figure>
        </p>
        <p>删除远程分支
            <br>
            <figure class="highlight shell">
                <table>
                    <tr>
                        <td class="code">
                            <pre><div class="line"><span class="meta">$</span><span class="bash"> git push origin --delete [branch-name]</span></div><div class="line"><span class="meta">$</span><span class="bash"> git branch -dr [remote/branch]</span></div></pre>
                        </td>
                    </tr>
                </table>
            </figure>
        </p>
        <h2 id="标签管理">
            <a href="#标签管理" class="headerlink" title="标签管理"></a>标签管理</h2>
        <p>列出所有tag
            <br>
            <figure class="highlight shell">
                <table>
                    <tr>
                        <td class="code">
                            <pre><div class="line"><span class="meta">$</span><span class="bash"> git tag</span></div></pre>
                        </td>
                    </tr>
                </table>
            </figure>
        </p>
        <p>新建一个tag在当前commit
            <br>
            <figure class="highlight crmsh">
                <table>
                    <tr>
                        <td class="code">
                            <pre><div class="line">$ git <span class="keyword">tag</span> <span class="title">[tag</span>]</div></pre>
                        </td>
                    </tr>
                </table>
            </figure>
        </p>
        <p>新建一个tag在指定commit
            <br>
            <figure class="highlight crmsh">
                <table>
                    <tr>
                        <td class="code">
                            <pre><div class="line">$ git <span class="keyword">tag</span> <span class="title">[tag</span>] [commit]</div></pre>
                        </td>
                    </tr>
                </table>
            </figure>
        </p>
        <p>删除本地tag
            <br>
            <figure class="highlight crmsh">
                <table>
                    <tr>
                        <td class="code">
                            <pre><div class="line">$ git <span class="keyword">tag</span> <span class="title">-d</span> [<span class="keyword">tag</span>]</div></pre>
                        </td>
                    </tr>
                </table>
            </figure>
        </p>
        <p>删除远程tag
            <br>
            <figure class="highlight elixir">
                <table>
                    <tr>
                        <td class="code">
                            <pre><div class="line"><span class="variable">$ </span>git push origin <span class="symbol">:refs/tags/</span>[tagname]</div></pre>
                        </td>
                    </tr>
                </table>
            </figure>
        </p>
        <p>查看tag信息
            <br>
            <figure class="highlight shell">
                <table>
                    <tr>
                        <td class="code">
                            <pre><div class="line"><span class="meta">$</span><span class="bash"> git show [tag]</span></div></pre>
                        </td>
                    </tr>
                </table>
            </figure>
        </p>
        <p>提交指定tag
            <br>
            <figure class="highlight accesslog">
                <table>
                    <tr>
                        <td class="code">
                            <pre><div class="line">$ git push <span class="string">[remote]</span> <span class="string">[tag]</span></div></pre>
                        </td>
                    </tr>
                </table>
            </figure>
        </p>
        <p>提交所有tag
            <br>
            <figure class="highlight shell">
                <table>
                    <tr>
                        <td class="code">
                            <pre><div class="line"><span class="meta">$</span><span class="bash"> git push [remote] --tags</span></div></pre>
                        </td>
                    </tr>
                </table>
            </figure>
        </p>
        <p>新建一个分支，指向某个tag
            <br>
            <figure class="highlight accesslog">
                <table>
                    <tr>
                        <td class="code">
                            <pre><div class="line">$ git checkout -b <span class="string">[branch]</span> <span class="string">[tag]</span></div></pre>
                        </td>
                    </tr>
                </table>
            </figure>
        </p>
        <h2 id="查看历史或统计信息">
            <a href="#查看历史或统计信息" class="headerlink" title="查看历史或统计信息"></a>查看历史或统计信息</h2>
        <p>显示有变更的文件
            <br>
            <figure class="highlight shell">
                <table>
                    <tr>
                        <td class="code">
                            <pre><div class="line"><span class="meta">$</span><span class="bash"> git status</span></div></pre>
                        </td>
                    </tr>
                </table>
            </figure>
        </p>
        <p>显示当前分支的版本历史
            <br>
            <figure class="highlight shell">
                <table>
                    <tr>
                        <td class="code">
                            <pre><div class="line"><span class="meta">$</span><span class="bash"> git <span class="built_in">log</span></span></div></pre>
                        </td>
                    </tr>
                </table>
            </figure>
        </p>
        <p>显示commit历史，以及每次commit发生变更的文件
            <br>
            <figure class="highlight shell">
                <table>
                    <tr>
                        <td class="code">
                            <pre><div class="line"><span class="meta">$</span><span class="bash"> git <span class="built_in">log</span> --<span class="built_in">stat</span></span></div></pre>
                        </td>
                    </tr>
                </table>
            </figure>
        </p>
        <p>搜索提交历史，根据关键词
            <br>
            <figure class="highlight shell">
                <table>
                    <tr>
                        <td class="code">
                            <pre><div class="line"><span class="meta">$</span><span class="bash"> git <span class="built_in">log</span> -S [keyword]</span></div></pre>
                        </td>
                    </tr>
                </table>
            </figure>
        </p>
        <p>显示某个commit之后的所有变动，每个commit占据一行
            <br>
            <figure class="highlight applescript">
                <table>
                    <tr>
                        <td class="code">
                            <pre><div class="line">$ git <span class="built_in">log</span> [tag] HEAD <span class="comment">--pretty=format:%s</span></div></pre>
                        </td>
                    </tr>
                </table>
            </figure>
        </p>
        <p>显示某个commit之后的所有变动，其”提交说明”必须符合搜索条件
            <br>
            <figure class="highlight shell">
                <table>
                    <tr>
                        <td class="code">
                            <pre><div class="line"><span class="meta">$</span><span class="bash"> git <span class="built_in">log</span> [tag] HEAD --grep feature</span></div></pre>
                        </td>
                    </tr>
                </table>
            </figure>
        </p>
        <p>显示某个文件的版本历史，包括文件改名
            <br>
            <figure class="highlight gams">
                <table>
                    <tr>
                        <td class="code">
                            <pre><div class="line"><span class="symbol">$</span> git <span class="built-in">log</span> --follow [<span class="keyword">file</span>]</div><div class="line"><span class="symbol">$</span> git whatchanged [<span class="keyword">file</span>]</div></pre>
                        </td>
                    </tr>
                </table>
            </figure>
        </p>
        <p>显示指定文件相关的每一次diff
            <br>
            <figure class="highlight gams">
                <table>
                    <tr>
                        <td class="code">
                            <pre><div class="line"><span class="symbol">$</span> git <span class="built-in">log</span> -p [<span class="keyword">file</span>]</div></pre>
                        </td>
                    </tr>
                </table>
            </figure>
        </p>
        <p>显示过去5次提交
            <br>
            <figure class="highlight applescript">
                <table>
                    <tr>
                        <td class="code">
                            <pre><div class="line">$ git <span class="built_in">log</span> <span class="number">-5</span> <span class="comment">--pretty --oneline</span></div></pre>
                        </td>
                    </tr>
                </table>
            </figure>
        </p>
        <p>显示所有提交过的用户，按提交次数排序
            <br>
            <figure class="highlight shell">
                <table>
                    <tr>
                        <td class="code">
                            <pre><div class="line"><span class="meta">$</span><span class="bash"> git shortlog -sn</span></div></pre>
                        </td>
                    </tr>
                </table>
            </figure>
        </p>
        <p>显示指定文件式什么人在什么时间修改过
            <br>
            <figure class="highlight gams">
                <table>
                    <tr>
                        <td class="code">
                            <pre><div class="line"><span class="symbol">$</span> git blame [<span class="keyword">file</span>]</div></pre>
                        </td>
                    </tr>
                </table>
            </figure>
        </p>
        <p>显示暂存区和工作区的差异
            <br>
            <figure class="highlight shell">
                <table>
                    <tr>
                        <td class="code">
                            <pre><div class="line"><span class="meta">$</span><span class="bash"> git diff</span></div></pre>
                        </td>
                    </tr>
                </table>
            </figure>
        </p>
        <p>显示暂存区和上一个commit的差异
            <br>
            <figure class="highlight gams">
                <table>
                    <tr>
                        <td class="code">
                            <pre><div class="line"><span class="symbol">$</span> git diff --cached [<span class="keyword">file</span>]</div></pre>
                        </td>
                    </tr>
                </table>
            </figure>
        </p>
        <p>显示工作区与当前分支最新commit之间的差异
            <br>
            <figure class="highlight shell">
                <table>
                    <tr>
                        <td class="code">
                            <pre><div class="line"><span class="meta">$</span><span class="bash"> git diff HEAD</span></div></pre>
                        </td>
                    </tr>
                </table>
            </figure>
        </p>
        <p>显示两次提交之间的差异
            <br>
            <figure class="highlight maxima">
                <table>
                    <tr>
                        <td class="code">
                            <pre><div class="line">$ git <span class="built_in">diff</span> [<span class="built_in">first</span>-branch]...[<span class="built_in">second</span>-branch]</div></pre>
                        </td>
                    </tr>
                </table>
            </figure>
        </p>
        <p>显示今天你写了多少行代码
            <br>
            <figure class="highlight mipsasm">
                <table>
                    <tr>
                        <td class="code">
                            <pre><div class="line">$ git <span class="keyword">dirr </span>--<span class="keyword">shortstat </span><span class="string">"@&#123;0 day ago&#125;"</span></div></pre>
                        </td>
                    </tr>
                </table>
            </figure>
        </p>
        <p>显示某次提交的元数据和内容变化
            <br>
            <figure class="highlight shell">
                <table>
                    <tr>
                        <td class="code">
                            <pre><div class="line"><span class="meta">$</span><span class="bash"> git show [commit]</span></div></pre>
                        </td>
                    </tr>
                </table>
            </figure>
        </p>
        <p>显示某次提交发生变化的文件
            <br>
            <figure class="highlight fortran">
                <table>
                    <tr>
                        <td class="code">
                            <pre><div class="line">$ git show --<span class="keyword">name</span>-<span class="keyword">only</span> [commit]</div></pre>
                        </td>
                    </tr>
                </table>
            </figure>
        </p>
        <p>显示某次提交时，某个文件的内容
            <br>
            <figure class="highlight accesslog">
                <table>
                    <tr>
                        <td class="code">
                            <pre><div class="line">$ git show <span class="string">[commit]</span>:<span class="string">[filename]</span></div></pre>
                        </td>
                    </tr>
                </table>
            </figure>
        </p>
        <h2 id="代码远程同步">
            <a href="#代码远程同步" class="headerlink" title="代码远程同步"></a>代码远程同步</h2>
        <p>下载远程仓库的所有变动
            <br>
            <figure class="highlight shell">
                <table>
                    <tr>
                        <td class="code">
                            <pre><div class="line"><span class="meta">$</span><span class="bash"> git fetch [remote]</span></div></pre>
                        </td>
                    </tr>
                </table>
            </figure>
        </p>
        <p>显示所有远程仓库
            <br>
            <figure class="highlight shell">
                <table>
                    <tr>
                        <td class="code">
                            <pre><div class="line"><span class="meta">$</span><span class="bash"> git remote -v</span></div></pre>
                        </td>
                    </tr>
                </table>
            </figure>
        </p>
        <p>显示某个远程仓库的信息
            <br>
            <figure class="highlight shell">
                <table>
                    <tr>
                        <td class="code">
                            <pre><div class="line"><span class="meta">$</span><span class="bash"> git remote show [remote]</span></div></pre>
                        </td>
                    </tr>
                </table>
            </figure>
        </p>
        <p>增加一个新的远程仓库，并命名
            <br>
            <figure class="highlight accesslog">
                <table>
                    <tr>
                        <td class="code">
                            <pre><div class="line">$ git remote add <span class="string">[shortname]</span> <span class="string">[url]</span></div></pre>
                        </td>
                    </tr>
                </table>
            </figure>
        </p>
        <p>取回远程仓库的变化，并与本地分支合并
            <br>
            <figure class="highlight accesslog">
                <table>
                    <tr>
                        <td class="code">
                            <pre><div class="line">$ git pull <span class="string">[remote]</span> <span class="string">[branch]</span></div></pre>
                        </td>
                    </tr>
                </table>
            </figure>
        </p>
        <p>上传本地指定分支到远程仓库
            <br>
            <figure class="highlight accesslog">
                <table>
                    <tr>
                        <td class="code">
                            <pre><div class="line">$ git push <span class="string">[remote]</span> <span class="string">[branch]</span></div></pre>
                        </td>
                    </tr>
                </table>
            </figure>
        </p>
        <p>强行推送当前分支到远程仓库，即使有冲突
            <br>
            <figure class="highlight shell">
                <table>
                    <tr>
                        <td class="code">
                            <pre><div class="line"><span class="meta">$</span><span class="bash"> git push [remote] --force</span></div></pre>
                        </td>
                    </tr>
                </table>
            </figure>
        </p>
        <p>推送所有分支到远程仓库
            <br>
            <figure class="highlight gams">
                <table>
                    <tr>
                        <td class="code">
                            <pre><div class="line"><span class="symbol">$</span> git push [remote] --<span class="keyword">all</span></div></pre>
                        </td>
                    </tr>
                </table>
            </figure>
        </p>
        <h2 id="撤销恢复">
            <a href="#撤销恢复" class="headerlink" title="撤销恢复"></a>撤销恢复</h2>
        <p>恢复暂存区的指定文件到工作区
            <br>
            <figure class="highlight gams">
                <table>
                    <tr>
                        <td class="code">
                            <pre><div class="line"><span class="symbol">$</span> git checkout [<span class="keyword">file</span>]</div></pre>
                        </td>
                    </tr>
                </table>
            </figure>
        </p>
        <p>恢复某个commit的指定文件到暂存区和工作区
            <br>
            <figure class="highlight accesslog">
                <table>
                    <tr>
                        <td class="code">
                            <pre><div class="line">$ git checkout <span class="string">[commit]</span> <span class="string">[file]</span></div></pre>
                        </td>
                    </tr>
                </table>
            </figure>
        </p>
        <p>恢复暂存区的所有文件到工作区
            <br>
            <figure class="highlight shell">
                <table>
                    <tr>
                        <td class="code">
                            <pre><div class="line"><span class="meta">$</span><span class="bash"> git checkout .</span></div></pre>
                        </td>
                    </tr>
                </table>
            </figure>
        </p>
        <p>重置暂存区的指定文件，与上一次commit保持一致，但工作区不变
            <br>
            <figure class="highlight gams">
                <table>
                    <tr>
                        <td class="code">
                            <pre><div class="line"><span class="symbol">$</span> git reset [<span class="keyword">file</span>]</div></pre>
                        </td>
                    </tr>
                </table>
            </figure>
        </p>
        <p>重置暂存区与工作区，与上一次commit保持一致
            <br>
            <figure class="highlight shell">
                <table>
                    <tr>
                        <td class="code">
                            <pre><div class="line"><span class="meta">$</span><span class="bash"> git reset --hard</span></div></pre>
                        </td>
                    </tr>
                </table>
            </figure>
        </p>
        <p>重置当前分支的指针为指定commit，同时重置暂存区，但工作区不变
            <br>
            <figure class="highlight shell">
                <table>
                    <tr>
                        <td class="code">
                            <pre><div class="line"><span class="meta">$</span><span class="bash"> git reset [commit]</span></div></pre>
                        </td>
                    </tr>
                </table>
            </figure>
        </p>
        <p>重置当前分支的HEAD为指定commit，同时重置暂存区和工作区，与指定commit一致
            <br>
            <figure class="highlight shell">
                <table>
                    <tr>
                        <td class="code">
                            <pre><div class="line"><span class="meta">$</span><span class="bash"> git reset --hard [commit]</span></div></pre>
                        </td>
                    </tr>
                </table>
            </figure>
        </p>
        <p>重置当前HEAD为指定commit，但保持暂存区和工作区不变
            <br>
            <figure class="highlight shell">
                <table>
                    <tr>
                        <td class="code">
                            <pre><div class="line"><span class="meta">$</span><span class="bash"> git reset --keep [commit]</span></div></pre>
                        </td>
                    </tr>
                </table>
            </figure>
        </p>
        <p>新建一个commit，用来撤销指定commit。后者的所有变化都将被前者抵消，并且应用到当前分支
            <br>
            <figure class="highlight shell">
                <table>
                    <tr>
                        <td class="code">
                            <pre><div class="line"><span class="meta">$</span><span class="bash"> git revert [commit]</span></div></pre>
                        </td>
                    </tr>
                </table>
            </figure>
        </p>
        <p>暂时将未提交的变化移除，稍后再植入
            <br>
            <figure class="highlight shell">
                <table>
                    <tr>
                        <td class="code">
                            <pre><div class="line"><span class="meta">$</span><span class="bash"> git stash</span></div><div class="line"><span class="meta">$</span><span class="bash"> git stash pop</span></div></pre>
                        </td>
                    </tr>
                </table>
            </figure>
        </p>
        <h2 id="多人工作模式">
            <a href="#多人工作模式" class="headerlink" title="多人工作模式"></a>多人工作模式</h2>
        <p>多人协作的工作模式通常是这样的:
            <br>1、首先，可以试图用
            <code>git push origin &lt;branch-name&gt;</code> 推送自己的修改；
            <br>2、如果推送失败，则因为远程分支比你的本地更新，需要先用
            <code>git pull</code>试图合并；
            <br>3、如果合并有冲突，则解决冲突，并在本地提交；
            <br>4、没有冲突或者解决掉冲突后，再用
            <code>git push origin &lt;branch-name&gt;</code> 推送就能成功！
            <br>如果
            <code>git pull</code>提示
            <code>no tracking information</code>, 则说明本地分支和远程分支的链接关系没有创建，用命令
            <code>git branch --set-upstream-to=origin/&lt;branch-name&gt; &lt;branch-name&gt;</code>。
            <br>这就是多人协作的工作模式，一旦熟悉了，就非常简单。</p>
        <p>查看远程库信息，使用
            <code>git remote -v</code>;
            <br>本地新建的分支如果不推送到远程，对其他人就是不可见的；
            <br>从本地推送分支，使用
            <code>git push origin branch-name</code>, 如果推送失败，先用
            <code>git pull</code>抓取远程的新提交；
            <br>在本地创建和远程分支对应的分支，使用
            <code>git checkout -b branch-name origin/branch-name</code>, 本地和远程分支的名称最好一致；
            <br>建立本地分支和远程分支的关联，使用
            <code>git branch --set-upstream-to=origin/branch-name branch-name</code>;
            <br>从远程抓取分支，使用
            <code>git pull</code>, 如果有冲突，要先处理冲突。</p>
        <h2 id="配置别名">
            <a href="#配置别名" class="headerlink" title="配置别名"></a>配置别名</h2>
        <p>我们需要敲一行命令，告诉Git，以后
            <code>st</code>就表示
            <code>status</code>：
            <br>
            <code>git config --global alias.st status</code>
            <br>还有别的命令可以简写，很多人用
            <code>co</code>表示
            <code>checkout</code>,
            <code>ci</code>表示
            <code>commit</code>,
            <code>br</code>表示
            <code>branch</code>;
            <br>
            <figure class="highlight routeros">
                <table>
                    <tr>
                        <td class="code">
                            <pre><div class="line">git<span class="built_in"> config </span>--global alias.co checkout</div><div class="line">git<span class="built_in"> config </span>--global alias.ci commit</div><div class="line">git<span class="built_in"> config </span>--global alias.br brancgh</div></pre>
                        </td>
                    </tr>
                </table>
            </figure>
        </p>
        <p>
            <code>--global</code>参数是全局参数，也就是这些命令在这台电脑的所有Git仓库下都有用。
            <br>甚至还有人丧心病狂地把
            <code>lg</code>设置成了:
            <br>
            <code>git config --global alias.lg &quot;log --color --graph --pretty=format:&#39;%Cred%h%Creset -%C(yellow)%d%Creset
                %s %Cgreen(%cr) %C(bold blue)&lt;%an&gt;%Creset&#39; --abbrev-commit&quot;</code>
        </p>
        <h2 id="Git-gitignore使用">
            <a href="#Git-gitignore使用" class="headerlink" title="Git .gitignore使用"></a>Git .gitignore使用</h2>
        <p>有些时候我们不希望把一些编译的东西提交到git中，gitignore可以方便管理我们不需要提交的文件，自动过滤设置的文件。
            <br>Git提供了一种可配性很强的机制来允许用户将指定的文件或目录排除在版本控制之外，它会检查代码仓库的根目录下是否存在一个名为
            <code>.gitignore</code>的文件，如果存在的话就去一行行读取这个文件中的内容，并把每一行指定的文件或目录排除在版本控制之外。注意
            <code>.gitignore</code>中指定的文件或目录是可以用
            <code>*</code>通配符的。</p>
        <p>这里以一个项目为例。
            <br>第一步，创建代码库
            <br>首先进入当前的项目根目录
            <br>执行
            <code>git init</code>
            <br>这时项目根目录下会有
            <code>.git</code>文件夹
            <br>第二部，创建
            <code>.gitignore</code>文件
            <br>执行如下命令:
            <br>
            <code>touch .gitignore</code>
            <br>也可以新建一个文件，重命名为
            <code>.gitignore.</code>，注意后面有一个
            <code>.</code>
            <br>第三部，编辑
            <code>.gitignore</code>文件
            <br>
            <code>vim .gitignore</code>
            <br>然后在里面加入
            <code>build/</code>
            <br>表示我们不希望将
            <code>build</code>文件夹提交到git中，然后退出。
            <br>第四步，提交
            <br>
            <code>git add .</code>
            <br>将所有文件提交到git，会过滤掉bulid文件夹
            <br>
            <code>git commit -m &quot;过滤掉build文件夹&quot;</code>
            <br>执行提交
            <br>检查提交是否成功
            <br>
            <code>git status</code>
            <br>提示没有东西需要提交，说明提交成功。</p>
    </div>

</body>

</html>